Граф коммитов

566 Коммитов

Автор SHA1 Сообщение Дата
Tex Riddell 7f0662f1d8
Add missing '-' for pass in ExtractIRForPassTest.py (#5918)
The default generated RUN line generated by ExtractIRForPassTest.py adds
the desired pass to the options, but forgot to add the '-', so it would
fail with difficult to diagnose error in dxopt during argument parsing.

This adds the missing '-' so the RUN line doesn't have to be fixed in
this way every time the script is used.
2023-10-25 23:46:09 +00:00
Xiang Li 7c157be44d
Remove integer variants of SampleCmp (#5930)
Disable integer resource for SampleCmp/CmpLevel/CmpLevelZero.

Fixes #5564
2023-10-25 19:11:48 -04:00
Tex Riddell e1774f6e5b
Reformat hct python scripts with black (#5917)
A few syntax errors fixed along the way:
- hcttracei.py: `print` -> `print()`, `<>` -> `!=`
- hcttest-system-values.py: `os.path.join()` close paren before
arguments
2023-10-24 21:34:51 +00:00
Greg Roth 8caace9aa0
Revert mistaken debug changes to hctbuild (#5888)
The previous PR #5881 didn't do what it meant to and had a lot of debug
code due to a mistaken commit. This reverts that commit and restores the
setting of the build type flag
2023-10-18 13:23:48 -07:00
Greg Roth a56078a992
Make hctbuild cmake gen consistent with asserts (#5881)
A slightly complex series of events causes invocations of hctbuild after
the first to enable asserts in release builds. This sets the build type
even when it isn't needed to avoid it.

Because the build type was not being set when generating for visual
studio in hctbuild, when generating the cmake files using CMakeLists, it
would produce an alarming message saying it was defaulting to debug,
but, in fact, since it didn't care for the purposes of sln file
generation, that wasn't actually a problem, just confusing. It did set a
variable to enable asserts, but didn't do this for release variant
builds

The real problem occurs if hctbuild is invoked again, at that point,
instead of defaulting to Debug, it leaves the build type empty because
of another variable set in the cache.

Additionally, since the first invocation enabled asserts, that also
comes from the cache and so code that strips NDEBUG from all build
variants is invoked because the build type is, in fact, not debug, it's
an empty string.
2023-10-17 19:38:47 +00:00
Xiang Li 568ad77e66
[Sanitizer] Fix sanitizer fails in msvc (#5851)
1. Add -sanitizer to hctbuild.
2. Detach pCompileSource in recompile to avoid release freeed memory.
3. Fix Execution test issue about Init size.

This is for
https://github.com/microsoft/DirectXShaderCompiler/issues/5876
2023-10-17 13:35:02 -04:00
Xiang Li 956fa34b4f
[ClangCL] Cleanup rest clang-cl warnings (#5847)
1. printf format mismatch.
2. avoid cast from CComPtr<IncludeHandlerVFSOverlayForTest> to
CComPtr<IDxcIncludeHandler>.
3. fix signed unsigned mismatch.
4. fix order of fields in constructor.
5. add override for override methods.
6. port
01f4209631
7. add copy assignment operator to avoid
-Wdeprecated-copy-with-user-provided-copy
8. disable -Wignored-qualifiers for taef header WexTestClass.h.
9. remove unused fields.
10. add -clang-cl for hctbuild.
2023-10-16 19:40:51 +00:00
dependabot[bot] 1306b0ce66
Bump urllib3 from 2.0.4 to 2.0.6 in /utils/git (#5839)
Bumps urllib3 from 2.0.4 to 2.0.6.

Release notes Sourced from urllib3's releases
2.0.6

Added the Cookie header to the list of headers to strip
from requests when redirecting to a different host. As before, different
headers can be set via Retry.remove_headers_on_redirect.
(GHSA-v845-jxx5-vc9f)

2.0.5

Allowed pyOpenSSL third-party module without any deprecation
warning. https://redirect.github.com/urllib3/urllib3/issues/3126

Fixed default blocksize of HTTPConnection
classes to match high-level classes. Previously was 8KiB, now 16KiB. 
https://redirect.github.com/urllib3/urllib3/issues/3066

Changelog Sourced from urllib3's changelog

2.0.6 (2023-10-02)

Added the Cookie header to the list of headers to strip
from requests when redirecting to a different host. As before, different
headers can be set via
Retry.remove_headers_on_redirect

2.0.5 (2023-09-20)

Allowed pyOpenSSL third-party module without any deprecation
warning. https://github.com/urllib3/urllib3/issues/3126

Fixed default blocksize of HTTPConnection
classes to match high-level classes. Previously was 8KiB, now 16KiB.
https://github.com/urllib3/urllib3/issues/3066

Commits
262e3e3322
Release 2.0.6

644124ecd0
Merge pull request from GHSA-v845-jxx5-vc9f</li>

740380c59c
Bump cryptography from 41.0.3 to 41.0.4 (https://redirect.github.com/urllib3/urllib3/issues/3131)

d9f85a7494
Release 2.0.5

d41f412296
Undeprecate pyOpenSSL module (https://redirect.github.com/urllib3/urllib3/issues/3127)

b6c04cb3e6
Fix a link to "absolute URI" definition (https://redirect.github.com/urllib3/urllib3/issues/3128

af7c78fa30
refactor: change double conditional to one (https://redirect.github.com/urllib3/urllib3/issues/3118

34c13c8e68
Refer to current internet standards in docs on proxies (https://redirect.github.com/urllib3/urllib3/issues/3124

a3e94f218c
Fix a name of an attribute in docs (https://redirect.github.com/urllib3/urllib3/issues/3125

da69d4f4f9
Fix docs build (https://redirect.github.com/urllib3/urllib3/issues/3123

Additional commits viewable in https://github.com/urllib3/urllib3/compare/2.0.4...2.0.6


Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-16 10:59:44 -07:00
dependabot[bot] 56962cc126
Bump cryptography from 41.0.3 to 41.0.4 in /utils/git (#5840)
Bumps cryptography from 41.0.3 to 41.0.4.

Sourced from cryptography's changelog:

41.0.4 - 2023-09-19

* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL 3.1.3.

fc11bce693
bump for 41.0.4 
https://github.com/pyca/cryptography/pull/9629
See full diff in https://github.com/pyca/cryptography/compare/41.0.3...41.0.4

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-16 10:49:31 -07:00
Chris B 0dc8d9060d
Pull in llvm-project's clang-format check action (#5834)
This action and scripting was written by @tru for LLVM and addresses
some of the false positives we've been seeing in our action. There is
more room for improvement, but it would be better to unify than to have
divergent approaches since we're solving the same problem.
2023-10-09 14:55:39 -05:00
Adam Yang e4b9b88c0c
Fixed a crash in unroller when exiting blocks use switch instead of branch (#5779)
The code to structurize loop exits assumed exiting blocks always use
BranchInst and never SwitchInst. This caused a crash. This change makes
the structurizer preemptively check whether this assumption is true
before attempting.
2023-09-26 10:59:22 -07:00
Xiang Li 95253012ea
[lit] Enable exec test by default for hcttest (#5652)
Enable exec test for hcttest -all.

Fixes https://github.com/microsoft/DirectXShaderCompiler/issues/5551
2023-09-20 22:40:19 -04:00
Greg Roth 4d132f95ff
[lit] allow for spaces in taef commands (#5720)
The way taef tests were gathered and executed previously flattened the
list of arguments to a string. This allowed the weird /select: flag to
work correctly, but if any of the arguments had spaces, they were
misinterpretted having lost the implicit quotes around each.

By removing the flattening, putting a space between the flag and the
argument for /select: and removing the explicit quotes around that
argument, the command executes properly whether there are spaces or not

Additionally added a way to detect when these commands failed since they
were silently failing and skipping a large swath of testing when spaces
were present.

Fixes #5719
2023-09-18 19:58:04 +00:00
Xiang Li 549030f977
[lit] set clang_taef_site_config in llvm-lit.py (#5717)
This will make it possible to run taef test from llvm-lit.py directly
 without set clang_taef_site_config and clang_taef_exec_site_config.
2023-09-14 23:43:43 +00:00
Chris B 3266a87f9a
[NFC] Remove SAL annotations from internal APIs (#5639)
We don't keep these annotations up to date or rely on them, so to
simplify our platform layering and ease code formatting this change
removes all the SAL annotations from internal APIs. This change also
replaces most `_Analysis_Assme_(...)` annotations with `assert(...)`.

One `_Analysis_Assume_` in ParseDecl.cpp needed to be updated because it
was incorrect. The code was `_Analysis_Assume_(assert(name.size() >
sizeof("space"));`. When converted to an `assert` it fired in our test
suite because the sizeof a string literal includes the null terminator,
but the size of a StringRef does not.

A few of the `_Analysis_Assume_` annotations were removed because they
didn't make sense (like the ones inside the `DXASSERT` implementation,
and a few others were removed to avoid introducing additional header or
linkage dependencies.

This change does not introduce any functional or behavioral changes.
2023-09-14 08:59:49 -05:00
Joshua Batista 6d26052111
[HCT] Add user defined query functionality (#5555)
This PR aims to add some functionality to hctdb_instrhelp.py to
efficiently search and find specific instructions.
For example, in #5451, a parser needed to be written to parse through
gen_intrin_main.txt to search for any set of instructions that:

1. had at least one function attribute that was "readnone"
2. All had the same return type
3. All had the same argument list (types and length)

This search could've been made much easier if hctdb_instrhelp.py had a
method to search through instructions in a database-like manner.
This PR allows the user to define a query function with which to filter
out dxil instructions in hctdb.py. The instructions can be filtered out
based on function attributes, return type, function name, and the
function argument list. It should allow the user to quickly find
instructions that satisfy any arbitrary requirements.

On the command line, the user may run: `python3 hctdb_instrhelp.py
--query-dxil=<filename-no-extension>`
This command will instruct hctdb_instrhelp.py to run a query using the
inst_query_dxil function defined by the filename argument in the command
line. Alternatively, for hl operations, one can instead use the
--query-hlsl argument, and define a function called inst_query_hlsl in
that file instead.
And then the query functionality of the script will be run, which
applies the user-defined query function to all instructions and outputs
the query results.

Fixes #5556
2023-09-12 16:37:43 -07:00
Jeff Noyle 1598cd8bd2
Pix: Shader debug speedup (#5666)
Two related things:
-Move value/store annotations before instruction number annotations so
that we can avoid giving instruction numbers to the allocas that the
value-to-declare pass adds, since they are only there to implement PIX
shader debugging and do not need to be debugged by the PIX end-user.
And, otherwise, adding them messes up the instruction numbering for the
next part:
-Add parameters that allow PIX to limit instrumentation to a smaller
range of instruction numbers. This is a crude way to make
instrumentation workable for very large (>100k or so instructions)
shaders which otherwise will break the GPU driver either via out of
memory or via TDRs when the instrumentation is run.
2023-09-07 11:01:44 -07:00
Joshua Batista f9219a906e
[HCT] Fix up typos, add spirv options to help msg (#5586)
Fixes #5585
2023-08-22 23:35:16 +00:00
Xiang Li f6a90f07ca
[C++17] Force C++17 when build DXC (#5520)
This is for enable clang-cl build on windows.

The gtest fix is merging from

f66ab00704
to work around 'operator <<' is ambiguous on DefaultPrintNonContainerTo.
2023-08-22 13:20:27 -04:00
Helena Kotas b503da7084
DXC Tests: Filter out unsupported test, add verbose option and improve output (#5537)
Improve output of DXC test runs:
- Add `-lit-verbose` option to `hctbuild` to setup lit test runs with
verbose output (`hcttest` will list test names as they run)
- Hide tests that are never supported (there was over 10K of unsupported
tests found by LIT discovery)
- Show warnings about non-essential tools only in LIT debug mode
- Skip over file copying and non-LIT part of `hcttest.cmd` if all
requested tests have already been run
- CMD tests have been move under clang's lit tests; keep the `hcttest
cmd` option for running cmd tests separately

Number of unsupported tests was reduced from 10452 to 1 if spir-v is
enabled, 39 if not. The number of tests that run did not change.
2023-08-18 10:56:52 -07:00
Greg Roth a6497c3894
Allow select() to work with samplers (#5508)
Add any_sampler builtin parameter type. This will match any sampler type
as the select() built-in added with HLSL 2021 requires.

Adds a new built-in overload that takes the any_sampler type and ensures
that the last two arguments and return type match. Many of the changes
were required because we never had to ensure object parameter types
matched nor transmit that type to the return type before. Most of the
changes to MatchArguments in SemaHLSL are addressing new issues this
revealed. Non-basic types can pass the conversion check if they outright
match.

Adds testing to select() and the ternary operator that it supplements
for these usages

Fixes #4673
2023-08-09 22:22:06 +00:00
Helena Kotas 96e13a0e0a
Lit TAEF fixes: Use filter when listing tests and fix verbose parameter (#5494)
Lit TAEF files fixes:
- Use filter parameter when enumerating tests. This enables listing of
just the tests that should run, and it also filtering by architecture.
This is crucial for isolating ARM64 and ARM64EC versions of tests that
are in the same test dll.
- Fix verbose parameter - it was not getting applied
- Enable verbose on all tests - the output is shown only when the test fails

Related to #5489.
2023-08-08 10:28:39 -07:00
Helena Kotas a7efdffcac
Update version to 1.7.2308 (#5470)
Update version to 1.7.2308 before branching for Summer 2023 Release.
2023-07-28 17:30:44 +00:00
Xiang Li 92ee02e9bd
[lit] Make lit the only test runner (#5402)
Remove disable-lit and enable-lit from hctbuild/hcttest.

This is to allow write lit FileCheck shell test.
2023-07-27 20:01:09 +00:00
Xiang Li 65aa41f9b6
[lit] use lit.py directly to allow send parameter to lit from hcttest (#5438)
This is for support adapter option for exec test when using lit.
no_priority is enabled for clang test too.

CMake behavior will be the same except not support adapter option.

Also hcttest cmd will only run cmd test for lit.
2023-07-27 14:37:49 -04:00
Xiang Li 051b05cc5c
[lit] fall back to taef for taef only test options (#5404)
It is not easy to pass through the quoted /p options thru python. And
these options are mainly for local debug filter, not for taef FileCheck
tests. Just fall back to taef for these options and treat them like taef
helper.

This is help to allow lit FileCheck shell test.
2023-07-21 21:48:01 -04:00
Xiang Li 1174c88837
[lit] allow hcttest file-check to run on lit. (#5393)
This is prepare for allow both taef FileCheck and lit shell FileCheck
exist.
For tests under HLSLFileCheck directory, taef FileCheck will run. Else
py llvm-lit.py will run.
2023-07-20 13:49:07 -04:00
Xiang Li 1775fffc0b
[lit] allow find git usr bin in path directly. (#5385)
This is for case where git usr bin is not in winreg.
2023-07-03 13:31:29 -04:00
David Peixotto a64a7682cf
Add -lit-xml-output-path option to hctbuild.cmd (#5381)
This is used set a path that lit will use to write out an xml file
containing the test results.

I had tried to reuse the existing `-dxc-cmake-extra-args` flag to set
the output, but I ran into a lot of problems getting the arg value to
parse correctly since it has embedded `=` signs that cmd treats as a
command line separator the same as a space (we need to pass a value like
`-DLLVM_LIT_ARGS=--xunit-xml-output=log.xml`). No combination of quotes
and backslashes could get the arg value passed through correctly, so I
opted for the direct route taken in this PR.
2023-06-30 19:53:28 +00:00
Xiang Li 29b55d138c
[lit] Add git usr bin to path automatically. (#5355)
This will avoid test fail when forget to add git usr bin to PATH.

Port from
0f1f13fcb1
2023-06-29 17:20:35 -04:00
Xiang Li a65635b0ea
[lit] Pass the USERPROFILE variable through on Windows (#5331)
This is to fix the failure when running hcttest inside docker image.

Upstream PR is in

9de63b2e05
2023-06-27 19:20:08 +00:00
Adam Yang 8e0e56fe9d
Made linker preserve nops for Od. (#5317)
For `-Od`/`-O0` compilations, the compiler generates nop instructions in
the form of:

```
@dx.nothing.a = internal constant [1 x i32] zeroinitializer
...
%0 = load i32, i32* getelementptr inbounds ([1 x i32], [1 x i32]* @dx.nothing.a, i32 0, i32 0)
```
This instruction is intended to be a complete no-op, and backends that
recognizes this pattern can turn it into proper hardware specific no-op
instructions for debug purposes.

When linking DXIL libraries, the passes that run end up removing these
nops. This change adds a new pass `DxilReinsertNops` to run at the
beginning of linking to read the `LoadInst`s representing nops and turn
them back into calls of `dx.noop`, before turning back into loads again
at the end.
2023-06-28 01:21:29 +08:00
Austin Kinross 6a3e2485de
[PIX] Add pass to log DXR 1.0 shader invocation info into a UAV (#5301)
This PR adds a new PIX pass that instruments DXR 1.0 shaders
(intersection, any/closest hit and miss). The new pass emits each shader
invocation's [ray system
values](https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html#system-value-intrinsics)
and DispatchRaysIndex into a UAV that can be read back later. This will
enable new DXR debugging features in PIX.
2023-06-16 14:01:18 -07:00
Diego Novillo c8c6347c05
Prevent update_spirv_deps.sh from updating re2 and effcee. (#5250)
* Prevent update_spirv_deps.sh from updating re2 and effcee.

As per discussion in
https://github.com/microsoft/DirectXShaderCompiler/pull/5246, the
repositories re2 and effcee should not be updated when rolling
submodules forward.

* Also ignore DirectX-Headers submodule updates.

* Fix comment to match code.
2023-06-14 11:25:36 -04:00
Tex Riddell 8f3f77ed70
Fix variable definition checks in hcttest.cmd (#5277)
Replaced all the `if "%var%"==""` with `if [not] defined var`, which is
the proper way to determine whether the variable is defined or empty.
The other way breaks if statement parsing under various conditions.

This fixes handling of TAEF's /p:"var=val" parameter syntax as long as you
specify your additional TAEF parameters after a `--` argument break.
2023-06-07 21:30:48 -07:00
Xiang Li 06a7197e23
Enable lit by default. (#5133)
* Enable lit by default.

* Update README for git user bin.

* Add DXC_DISABLE_LIT to replace DXC_ENABLE_LIT

* Set -DDXC_DISABLE_LIT=Off for appveyor.

* Keep original name for ClangSPIRVTests

* Set correct path for unit tests binary.

* Remove doc about DXC_DISABLE_LIT

* Remove extra space.

* Remove DxcOnUnix.rst.
2023-06-05 10:35:24 -07:00
Chris B ea3623fdf7
Allow `ref` parameters for intrinsics (#5166)
We effectively have reference parameter passing for intrinsics, but we
accomplish it by extremely careful interpretation of `out` and `inout`
in specific contexts.

This change separates the two in our intrinsic defintiions. Parameters
marked `ref` become lvalue reference types in the intrinsic function
declarations but do not get annotated with `AR_QUAL_OUT`. This allows
us to differentate them as true reference parameters.

For the atomic result intrinsics this allows us to clear up some hacks
because we needed them to not be `out` parameters but we needed them to
be passed by reference.

I've left a comment in SemaHLSL where we match arguement types about a
further cleanup we should do to correct reference binding errors, but
that is a larger task that we should do separately.
2023-05-30 11:46:33 -05:00
Brian Favela 2bd4ee7ca4
Remove unused and failing script (#5220)
* Remove unused and failing script

* Removing/changing other pointers to 'hctcheckin'
2023-05-30 16:43:11 +00:00
Diego Novillo c4f9df287b
Add new script to update external dependencies for the SPIRV backend. (#5246)
This simplifies the updating of the external dependencies for the SPIRV
backend.

Tested on Linux.
2023-05-30 11:16:24 -04:00
Xiang Li 18c9e114f9
[lit] Port Support %if ... %else syntax for RUN lines from upstream (#5227)
* [lit] Port Support %if ... %else syntax for RUN lines from upstream

Based on
1041a9642b

This syntax allows to modify RUN lines based on features
available. For example:

    RUN: ... | FileCheck %s --check-prefix=%if windows %{CHECK-W%} %else %{CHECK-NON-W%}
    CHECK-W: ...
    CHECK-NON-W: ...

This is merged to allow dxilver check apply on each RUN line.
2023-05-26 14:10:34 -07:00
Xiang Li daf1386161
[dxa] Add option to dump reflection (#5232)
* [dxa] Add option to dump reflection

New option -dumpreflection is added to dump reflection data.
This is to support %D3DReflect test in lit.

* Move Reflection dump to DxilContainer.
2023-05-24 10:13:36 -07:00
Xiang Li fdf9074a4f
[enable-lit] Allow file-check when enable-lit (#5201)
Also run exec test separately.

This is help to keep existing workflow after switch to lit.
2023-05-11 08:30:24 -07:00
Xiang Li 918673ef5b
[enable-lit] use !TEST_CLANG! to get updated result (#5170)
This is for enable lit by default.
It fix issue when running single test instead of all test under lit.
%TEST_CLANG% will not get update until out of the if.
2023-04-21 15:36:31 -07:00
Xiang Li 14063a661c
[enable lit] Keep same name for ClangHLSLTests when enable lit (#5167)
* [enable lit] Keep same name for ClangHLSLTests when enable lit

This is for enable lit by default.
It will make sure with/without lit enabled, ClangHLSLTests output dll with same name.

Use ClangHLSLTests because LIT needs GoogleTest binaries to be named that way for test discovery.
2023-04-21 15:27:35 -07:00
Xiang Li 947861e2c0
Fix build error for deprecated function in UCRT. (#5162)
* Fix build error for deprecated function in UCRT.

This is for enable-lit by default.
gtest got link error for missing dup/dup2/close/creat.

* Update comment.

* Mark HLSL Change.
2023-04-20 21:33:50 -04:00
Tex Riddell 5874b72e81
Support dependent template args in HLSL Object templates (#5140)
HLSL objects have a special hook for validating template arguments.
Previously, this didn't handle dependent arguments.
This change skips dependent arguments, which will be checked once they are concrete.
2023-04-18 18:12:14 +00:00
Chris B 4f5e4d1b74
Setup `install-distribution` target for DXC (#5154)
* [CMake] Update distribution build for DXC

Building off the LLVM 3.9 changes, this gets the `install-distribution`
target working for DXC with preset parameters that configure the
normal distribution. It also enables the DXC distribution to be built
through Visual Studio builds since DXC has a limited number of
components so it doesn't suffer from the IDE issues that upstream
LLVM & Clang do.

The `hctbuild` tooling has been updated to set a default install
prefix relative to the build directory, and allow overriding with a flag.

Cherry-picked commit details below:

From c90e12fe9fd7eb9fd7b342e7ac0cec971dd3e4db Mon Sep 17 00:00:00 2001
From: Chris Bieneman <beanz@apple.com>
Date: Tue, 23 Feb 2016 20:33:53 +0000
Subject: [PATCH] [CMake] Create an install-distribution target driven by LLVM_DISTRIBUTION_COMPONENTS

The idea here is to provide a customizable install target that only depends on building the things you actually want to install. It relies on each component being installed having an auto-generated install-${component}, which in turn depends only on the target being installed.

This is fundamentally a workaround for the fact that CMake generates build files which have their "install" target depend on the "all" target. This results in "ninja install" building a bunch of unneeded things.

llvm-svn: 261681
2023-04-18 10:09:21 -05:00
Tex Riddell f4ea912411
Add script to compile to intermediate IR for easier pass test authoring (#5101)
This script automates some operations to make it easier to write IR tests:
  1. Gets the pass list for an HLSL compilation using -Odump
  2. Compiles HLSL with -fcgl and outputs to intermediate IR
  3. Collects list of passes before the desired pass and adds
     -hlsl-passes-pause to write correct metadata
  4. Invokes dxopt to run passes on -fcgl output and write bitcode result
  5. Disassembles bitcode to .ll file for use as a test
  6. Inserts RUN line with -hlsl-passes-resume and desired pass
2023-03-20 10:36:49 -07:00
Adam Yang 129024cd18
Added -opt-disable sink to disable instruction sinking in instcombine (#5050)
In some cases, sinking instructions can significantly extend register lifetime. Added option -opt-disable sink in the same vein as -opt-disable "gvn" so shader authors can have some degree of control over this behaviour.
2023-02-28 15:22:52 -08:00
Chris B 740dd0951b
Add `-verify` flag to DXC (#5032) 2023-02-16 17:56:34 -06:00